/*
 * Copyright (c) 2018-2021, NVIDIA CORPORATION.  All rights reserved.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 *
 * SPDX-FileCopyrightText: Copyright (c) 2018-2021 NVIDIA CORPORATION
 * SPDX-License-Identifier: Apache-2.0
 */

#pragma once

#include <vulkan/vulkan.h>

/** @DOC_START

# Function load_VK_EXTENSIONS
>  load_VK_EXTENSIONS : Vulkan Extension Loader

The extensions_vk files takes care of loading and providing the symbols of Vulkan C Api extensions.
It is generated by `extensions_vk.py` and generates all extensions found in vk.xml. See script for details.
.

The framework triggers this implicitly in the `nvvk::Context` class, immediately after creating the device.

```cpp
// loads all known extensions
load_VK_EXTENSIONS(instance, vkGetInstanceProcAddr, device, vkGetDeviceProcAddr);
```

@DOC_END */

/* Load all avaiable extensions */
void load_VK_EXTENSIONS(VkInstance instance, PFN_vkGetInstanceProcAddr getInstanceProcAddr, VkDevice device, PFN_vkGetDeviceProcAddr getDeviceProcAddr);

/* NVVK_GENERATE_DEFINE */
#if defined(VK_AMDX_shader_enqueue)
#define NVVK_HAS_VK_AMDX_shader_enqueue
#endif /* VK_AMDX_shader_enqueue */
#if defined(VK_AMD_buffer_marker)
#define NVVK_HAS_VK_AMD_buffer_marker
#endif /* VK_AMD_buffer_marker */
#if defined(VK_AMD_display_native_hdr)
#define NVVK_HAS_VK_AMD_display_native_hdr
#endif /* VK_AMD_display_native_hdr */
#if defined(VK_AMD_draw_indirect_count)
#define NVVK_HAS_VK_AMD_draw_indirect_count
#endif /* VK_AMD_draw_indirect_count */
#if defined(VK_AMD_shader_info)
#define NVVK_HAS_VK_AMD_shader_info
#endif /* VK_AMD_shader_info */
#if defined(VK_ANDROID_external_memory_android_hardware_buffer)
#define NVVK_HAS_VK_ANDROID_external_memory_android_hardware_buffer
#endif /* VK_ANDROID_external_memory_android_hardware_buffer */
#if defined(VK_EXT_acquire_drm_display)
#define NVVK_HAS_VK_EXT_acquire_drm_display
#endif /* VK_EXT_acquire_drm_display */
#if defined(VK_EXT_acquire_xlib_display)
#define NVVK_HAS_VK_EXT_acquire_xlib_display
#endif /* VK_EXT_acquire_xlib_display */
#if defined(VK_EXT_attachment_feedback_loop_dynamic_state)
#define NVVK_HAS_VK_EXT_attachment_feedback_loop_dynamic_state
#endif /* VK_EXT_attachment_feedback_loop_dynamic_state */
#if defined(VK_EXT_buffer_device_address)
#define NVVK_HAS_VK_EXT_buffer_device_address
#endif /* VK_EXT_buffer_device_address */
#if defined(VK_EXT_calibrated_timestamps)
#define NVVK_HAS_VK_EXT_calibrated_timestamps
#endif /* VK_EXT_calibrated_timestamps */
#if defined(VK_EXT_color_write_enable)
#define NVVK_HAS_VK_EXT_color_write_enable
#endif /* VK_EXT_color_write_enable */
#if defined(VK_EXT_conditional_rendering)
#define NVVK_HAS_VK_EXT_conditional_rendering
#endif /* VK_EXT_conditional_rendering */
#if defined(VK_EXT_debug_marker)
#define NVVK_HAS_VK_EXT_debug_marker
#endif /* VK_EXT_debug_marker */
#if defined(VK_EXT_debug_report)
#define NVVK_HAS_VK_EXT_debug_report
#endif /* VK_EXT_debug_report */
#if defined(VK_EXT_debug_utils)
#define NVVK_HAS_VK_EXT_debug_utils
#endif /* VK_EXT_debug_utils */
#if defined(VK_EXT_depth_bias_control)
#define NVVK_HAS_VK_EXT_depth_bias_control
#endif /* VK_EXT_depth_bias_control */
#if defined(VK_EXT_descriptor_buffer)
#define NVVK_HAS_VK_EXT_descriptor_buffer
#endif /* VK_EXT_descriptor_buffer */
#if defined(VK_EXT_descriptor_buffer) && (defined(VK_KHR_acceleration_structure) || defined(VK_NV_ray_tracing))
#define NVVK_HAS_VK_EXT_descriptor_buffer
#endif /* VK_EXT_descriptor_buffer && (VK_KHR_acceleration_structure || VK_NV_ray_tracing) */
#if defined(VK_EXT_device_fault)
#define NVVK_HAS_VK_EXT_device_fault
#endif /* VK_EXT_device_fault */
#if defined(VK_EXT_direct_mode_display)
#define NVVK_HAS_VK_EXT_direct_mode_display
#endif /* VK_EXT_direct_mode_display */
#if defined(VK_EXT_directfb_surface)
#define NVVK_HAS_VK_EXT_directfb_surface
#endif /* VK_EXT_directfb_surface */
#if defined(VK_EXT_discard_rectangles)
#define NVVK_HAS_VK_EXT_discard_rectangles
#endif /* VK_EXT_discard_rectangles */
#if defined(VK_EXT_discard_rectangles) && VK_EXT_DISCARD_RECTANGLES_SPEC_VERSION >= 2
#define NVVK_HAS_VK_EXT_discard_rectangles
#endif /* VK_EXT_discard_rectangles && VK_EXT_DISCARD_RECTANGLES_SPEC_VERSION >= 2 */
#if defined(VK_EXT_display_control)
#define NVVK_HAS_VK_EXT_display_control
#endif /* VK_EXT_display_control */
#if defined(VK_EXT_display_surface_counter)
#define NVVK_HAS_VK_EXT_display_surface_counter
#endif /* VK_EXT_display_surface_counter */
#if defined(VK_EXT_extended_dynamic_state)
#define NVVK_HAS_VK_EXT_extended_dynamic_state
#endif /* VK_EXT_extended_dynamic_state */
#if defined(VK_EXT_extended_dynamic_state2)
#define NVVK_HAS_VK_EXT_extended_dynamic_state2
#endif /* VK_EXT_extended_dynamic_state2 */
#if defined(VK_EXT_extended_dynamic_state3)
#define NVVK_HAS_VK_EXT_extended_dynamic_state3
#endif /* VK_EXT_extended_dynamic_state3 */
#if defined(VK_EXT_extended_dynamic_state3) && defined(VK_NV_clip_space_w_scaling)
#define NVVK_HAS_VK_EXT_extended_dynamic_state3
#endif /* VK_EXT_extended_dynamic_state3 && VK_NV_clip_space_w_scaling */
#if defined(VK_EXT_extended_dynamic_state3) && defined(VK_NV_viewport_swizzle)
#define NVVK_HAS_VK_EXT_extended_dynamic_state3
#endif /* VK_EXT_extended_dynamic_state3 && VK_NV_viewport_swizzle */
#if defined(VK_EXT_extended_dynamic_state3) && defined(VK_NV_fragment_coverage_to_color)
#define NVVK_HAS_VK_EXT_extended_dynamic_state3
#endif /* VK_EXT_extended_dynamic_state3 && VK_NV_fragment_coverage_to_color */
#if defined(VK_EXT_extended_dynamic_state3) && defined(VK_NV_framebuffer_mixed_samples)
#define NVVK_HAS_VK_EXT_extended_dynamic_state3
#endif /* VK_EXT_extended_dynamic_state3 && VK_NV_framebuffer_mixed_samples */
#if defined(VK_EXT_extended_dynamic_state3) && defined(VK_NV_shading_rate_image)
#define NVVK_HAS_VK_EXT_extended_dynamic_state3
#endif /* VK_EXT_extended_dynamic_state3 && VK_NV_shading_rate_image */
#if defined(VK_EXT_extended_dynamic_state3) && defined(VK_NV_representative_fragment_test)
#define NVVK_HAS_VK_EXT_extended_dynamic_state3
#endif /* VK_EXT_extended_dynamic_state3 && VK_NV_representative_fragment_test */
#if defined(VK_EXT_extended_dynamic_state3) && defined(VK_NV_coverage_reduction_mode)
#define NVVK_HAS_VK_EXT_extended_dynamic_state3
#endif /* VK_EXT_extended_dynamic_state3 && VK_NV_coverage_reduction_mode */
#if defined(VK_EXT_external_memory_host)
#define NVVK_HAS_VK_EXT_external_memory_host
#endif /* VK_EXT_external_memory_host */
#if defined(VK_EXT_full_screen_exclusive)
#define NVVK_HAS_VK_EXT_full_screen_exclusive
#endif /* VK_EXT_full_screen_exclusive */
#if defined(VK_EXT_full_screen_exclusive) && defined(VK_KHR_device_group)
#define NVVK_HAS_VK_EXT_full_screen_exclusive
#endif /* VK_EXT_full_screen_exclusive && VK_KHR_device_group */
#if defined(VK_EXT_full_screen_exclusive) && defined(VK_VERSION_1_1)
#define NVVK_HAS_VK_EXT_full_screen_exclusive
#endif /* VK_EXT_full_screen_exclusive && VK_VERSION_1_1 */
#if defined(VK_EXT_hdr_metadata)
#define NVVK_HAS_VK_EXT_hdr_metadata
#endif /* VK_EXT_hdr_metadata */
#if defined(VK_EXT_headless_surface)
#define NVVK_HAS_VK_EXT_headless_surface
#endif /* VK_EXT_headless_surface */
#if defined(VK_EXT_host_image_copy)
#define NVVK_HAS_VK_EXT_host_image_copy
#endif /* VK_EXT_host_image_copy */
#if defined(VK_EXT_host_query_reset)
#define NVVK_HAS_VK_EXT_host_query_reset
#endif /* VK_EXT_host_query_reset */
#if defined(VK_EXT_image_compression_control)
#define NVVK_HAS_VK_EXT_image_compression_control
#endif /* VK_EXT_image_compression_control */
#if defined(VK_EXT_image_drm_format_modifier)
#define NVVK_HAS_VK_EXT_image_drm_format_modifier
#endif /* VK_EXT_image_drm_format_modifier */
#if defined(VK_EXT_line_rasterization)
#define NVVK_HAS_VK_EXT_line_rasterization
#endif /* VK_EXT_line_rasterization */
#if defined(VK_EXT_mesh_shader)
#define NVVK_HAS_VK_EXT_mesh_shader
#endif /* VK_EXT_mesh_shader */
#if defined(VK_EXT_metal_objects)
#define NVVK_HAS_VK_EXT_metal_objects
#endif /* VK_EXT_metal_objects */
#if defined(VK_EXT_metal_surface)
#define NVVK_HAS_VK_EXT_metal_surface
#endif /* VK_EXT_metal_surface */
#if defined(VK_EXT_multi_draw)
#define NVVK_HAS_VK_EXT_multi_draw
#endif /* VK_EXT_multi_draw */
#if defined(VK_EXT_opacity_micromap)
#define NVVK_HAS_VK_EXT_opacity_micromap
#endif /* VK_EXT_opacity_micromap */
#if defined(VK_EXT_pageable_device_local_memory)
#define NVVK_HAS_VK_EXT_pageable_device_local_memory
#endif /* VK_EXT_pageable_device_local_memory */
#if defined(VK_EXT_pipeline_properties)
#define NVVK_HAS_VK_EXT_pipeline_properties
#endif /* VK_EXT_pipeline_properties */
#if defined(VK_EXT_private_data)
#define NVVK_HAS_VK_EXT_private_data
#endif /* VK_EXT_private_data */
#if defined(VK_EXT_sample_locations)
#define NVVK_HAS_VK_EXT_sample_locations
#endif /* VK_EXT_sample_locations */
#if defined(VK_EXT_shader_module_identifier)
#define NVVK_HAS_VK_EXT_shader_module_identifier
#endif /* VK_EXT_shader_module_identifier */
#if defined(VK_EXT_shader_object)
#define NVVK_HAS_VK_EXT_shader_object
#endif /* VK_EXT_shader_object */
#if defined(VK_EXT_shader_object) && defined(VK_NV_clip_space_w_scaling)
#define NVVK_HAS_VK_EXT_shader_object
#endif /* VK_EXT_shader_object && VK_NV_clip_space_w_scaling */
#if defined(VK_EXT_shader_object) && defined(VK_NV_viewport_swizzle)
#define NVVK_HAS_VK_EXT_shader_object
#endif /* VK_EXT_shader_object && VK_NV_viewport_swizzle */
#if defined(VK_EXT_shader_object) && defined(VK_NV_fragment_coverage_to_color)
#define NVVK_HAS_VK_EXT_shader_object
#endif /* VK_EXT_shader_object && VK_NV_fragment_coverage_to_color */
#if defined(VK_EXT_shader_object) && defined(VK_NV_framebuffer_mixed_samples)
#define NVVK_HAS_VK_EXT_shader_object
#endif /* VK_EXT_shader_object && VK_NV_framebuffer_mixed_samples */
#if defined(VK_EXT_shader_object) && defined(VK_NV_shading_rate_image)
#define NVVK_HAS_VK_EXT_shader_object
#endif /* VK_EXT_shader_object && VK_NV_shading_rate_image */
#if defined(VK_EXT_shader_object) && defined(VK_NV_representative_fragment_test)
#define NVVK_HAS_VK_EXT_shader_object
#endif /* VK_EXT_shader_object && VK_NV_representative_fragment_test */
#if defined(VK_EXT_shader_object) && defined(VK_NV_coverage_reduction_mode)
#define NVVK_HAS_VK_EXT_shader_object
#endif /* VK_EXT_shader_object && VK_NV_coverage_reduction_mode */
#if defined(VK_EXT_swapchain_maintenance1)
#define NVVK_HAS_VK_EXT_swapchain_maintenance1
#endif /* VK_EXT_swapchain_maintenance1 */
#if defined(VK_EXT_tooling_info)
#define NVVK_HAS_VK_EXT_tooling_info
#endif /* VK_EXT_tooling_info */
#if defined(VK_EXT_transform_feedback)
#define NVVK_HAS_VK_EXT_transform_feedback
#endif /* VK_EXT_transform_feedback */
#if defined(VK_EXT_validation_cache)
#define NVVK_HAS_VK_EXT_validation_cache
#endif /* VK_EXT_validation_cache */
#if defined(VK_EXT_vertex_input_dynamic_state)
#define NVVK_HAS_VK_EXT_vertex_input_dynamic_state
#endif /* VK_EXT_vertex_input_dynamic_state */
#if defined(VK_FUCHSIA_buffer_collection)
#define NVVK_HAS_VK_FUCHSIA_buffer_collection
#endif /* VK_FUCHSIA_buffer_collection */
#if defined(VK_FUCHSIA_external_memory)
#define NVVK_HAS_VK_FUCHSIA_external_memory
#endif /* VK_FUCHSIA_external_memory */
#if defined(VK_FUCHSIA_external_semaphore)
#define NVVK_HAS_VK_FUCHSIA_external_semaphore
#endif /* VK_FUCHSIA_external_semaphore */
#if defined(VK_FUCHSIA_imagepipe_surface)
#define NVVK_HAS_VK_FUCHSIA_imagepipe_surface
#endif /* VK_FUCHSIA_imagepipe_surface */
#if defined(VK_GGP_stream_descriptor_surface)
#define NVVK_HAS_VK_GGP_stream_descriptor_surface
#endif /* VK_GGP_stream_descriptor_surface */
#if defined(VK_GOOGLE_display_timing)
#define NVVK_HAS_VK_GOOGLE_display_timing
#endif /* VK_GOOGLE_display_timing */
#if defined(VK_HUAWEI_cluster_culling_shader)
#define NVVK_HAS_VK_HUAWEI_cluster_culling_shader
#endif /* VK_HUAWEI_cluster_culling_shader */
#if defined(VK_HUAWEI_invocation_mask)
#define NVVK_HAS_VK_HUAWEI_invocation_mask
#endif /* VK_HUAWEI_invocation_mask */
#if defined(VK_HUAWEI_subpass_shading)
#define NVVK_HAS_VK_HUAWEI_subpass_shading
#endif /* VK_HUAWEI_subpass_shading */
#if defined(VK_INTEL_performance_query)
#define NVVK_HAS_VK_INTEL_performance_query
#endif /* VK_INTEL_performance_query */
#if defined(VK_KHR_acceleration_structure)
#define NVVK_HAS_VK_KHR_acceleration_structure
#endif /* VK_KHR_acceleration_structure */
#if defined(VK_KHR_android_surface)
#define NVVK_HAS_VK_KHR_android_surface
#endif /* VK_KHR_android_surface */
#if defined(VK_KHR_bind_memory2)
#define NVVK_HAS_VK_KHR_bind_memory2
#endif /* VK_KHR_bind_memory2 */
#if defined(VK_KHR_buffer_device_address)
#define NVVK_HAS_VK_KHR_buffer_device_address
#endif /* VK_KHR_buffer_device_address */
#if defined(VK_KHR_calibrated_timestamps)
#define NVVK_HAS_VK_KHR_calibrated_timestamps
#endif /* VK_KHR_calibrated_timestamps */
#if defined(VK_KHR_cooperative_matrix)
#define NVVK_HAS_VK_KHR_cooperative_matrix
#endif /* VK_KHR_cooperative_matrix */
#if defined(VK_KHR_copy_commands2)
#define NVVK_HAS_VK_KHR_copy_commands2
#endif /* VK_KHR_copy_commands2 */
#if defined(VK_KHR_create_renderpass2)
#define NVVK_HAS_VK_KHR_create_renderpass2
#endif /* VK_KHR_create_renderpass2 */
#if defined(VK_KHR_deferred_host_operations)
#define NVVK_HAS_VK_KHR_deferred_host_operations
#endif /* VK_KHR_deferred_host_operations */
#if defined(VK_KHR_descriptor_update_template)
#define NVVK_HAS_VK_KHR_descriptor_update_template
#endif /* VK_KHR_descriptor_update_template */
#if defined(VK_KHR_descriptor_update_template) && defined(VK_KHR_push_descriptor)
#define NVVK_HAS_VK_KHR_descriptor_update_template
#endif /* VK_KHR_descriptor_update_template && VK_KHR_push_descriptor */
#if defined(VK_KHR_device_group)
#define NVVK_HAS_VK_KHR_device_group
#endif /* VK_KHR_device_group */
#if defined(VK_KHR_device_group) && defined(VK_KHR_surface)
#define NVVK_HAS_VK_KHR_device_group
#endif /* VK_KHR_device_group && VK_KHR_surface */
#if defined(VK_KHR_device_group) && defined(VK_KHR_swapchain)
#define NVVK_HAS_VK_KHR_device_group
#endif /* VK_KHR_device_group && VK_KHR_swapchain */
#if defined(VK_KHR_device_group_creation)
#define NVVK_HAS_VK_KHR_device_group_creation
#endif /* VK_KHR_device_group_creation */
#if defined(VK_KHR_draw_indirect_count)
#define NVVK_HAS_VK_KHR_draw_indirect_count
#endif /* VK_KHR_draw_indirect_count */
#if defined(VK_KHR_dynamic_rendering)
#define NVVK_HAS_VK_KHR_dynamic_rendering
#endif /* VK_KHR_dynamic_rendering */
#if defined(VK_KHR_external_fence_capabilities)
#define NVVK_HAS_VK_KHR_external_fence_capabilities
#endif /* VK_KHR_external_fence_capabilities */
#if defined(VK_KHR_external_fence_fd)
#define NVVK_HAS_VK_KHR_external_fence_fd
#endif /* VK_KHR_external_fence_fd */
#if defined(VK_KHR_external_fence_win32)
#define NVVK_HAS_VK_KHR_external_fence_win32
#endif /* VK_KHR_external_fence_win32 */
#if defined(VK_KHR_external_memory_capabilities)
#define NVVK_HAS_VK_KHR_external_memory_capabilities
#endif /* VK_KHR_external_memory_capabilities */
#if defined(VK_KHR_external_memory_fd)
#define NVVK_HAS_VK_KHR_external_memory_fd
#endif /* VK_KHR_external_memory_fd */
#if defined(VK_KHR_external_memory_win32)
#define NVVK_HAS_VK_KHR_external_memory_win32
#endif /* VK_KHR_external_memory_win32 */
#if defined(VK_KHR_external_semaphore_capabilities)
#define NVVK_HAS_VK_KHR_external_semaphore_capabilities
#endif /* VK_KHR_external_semaphore_capabilities */
#if defined(VK_KHR_external_semaphore_fd)
#define NVVK_HAS_VK_KHR_external_semaphore_fd
#endif /* VK_KHR_external_semaphore_fd */
#if defined(VK_KHR_external_semaphore_win32)
#define NVVK_HAS_VK_KHR_external_semaphore_win32
#endif /* VK_KHR_external_semaphore_win32 */
#if defined(VK_KHR_fragment_shading_rate)
#define NVVK_HAS_VK_KHR_fragment_shading_rate
#endif /* VK_KHR_fragment_shading_rate */
#if defined(VK_KHR_get_memory_requirements2)
#define NVVK_HAS_VK_KHR_get_memory_requirements2
#endif /* VK_KHR_get_memory_requirements2 */
#if defined(VK_KHR_get_physical_device_properties2)
#define NVVK_HAS_VK_KHR_get_physical_device_properties2
#endif /* VK_KHR_get_physical_device_properties2 */
#if defined(VK_KHR_maintenance1)
#define NVVK_HAS_VK_KHR_maintenance1
#endif /* VK_KHR_maintenance1 */
#if defined(VK_KHR_maintenance3)
#define NVVK_HAS_VK_KHR_maintenance3
#endif /* VK_KHR_maintenance3 */
#if defined(VK_KHR_maintenance4)
#define NVVK_HAS_VK_KHR_maintenance4
#endif /* VK_KHR_maintenance4 */
#if defined(VK_KHR_maintenance5)
#define NVVK_HAS_VK_KHR_maintenance5
#endif /* VK_KHR_maintenance5 */
#if defined(VK_KHR_maintenance6)
#define NVVK_HAS_VK_KHR_maintenance6
#endif /* VK_KHR_maintenance6 */
#if defined(VK_KHR_maintenance6) && defined(VK_KHR_push_descriptor)
#define NVVK_HAS_VK_KHR_maintenance6
#endif /* VK_KHR_maintenance6 && VK_KHR_push_descriptor */
#if defined(VK_KHR_maintenance6) && defined(VK_EXT_descriptor_buffer)
#define NVVK_HAS_VK_KHR_maintenance6
#endif /* VK_KHR_maintenance6 && VK_EXT_descriptor_buffer */
#if defined(VK_KHR_map_memory2)
#define NVVK_HAS_VK_KHR_map_memory2
#endif /* VK_KHR_map_memory2 */
#if defined(VK_KHR_performance_query)
#define NVVK_HAS_VK_KHR_performance_query
#endif /* VK_KHR_performance_query */
#if defined(VK_KHR_pipeline_executable_properties)
#define NVVK_HAS_VK_KHR_pipeline_executable_properties
#endif /* VK_KHR_pipeline_executable_properties */
#if defined(VK_KHR_present_wait)
#define NVVK_HAS_VK_KHR_present_wait
#endif /* VK_KHR_present_wait */
#if defined(VK_KHR_push_descriptor)
#define NVVK_HAS_VK_KHR_push_descriptor
#endif /* VK_KHR_push_descriptor */
#if defined(VK_KHR_push_descriptor) && defined(VK_VERSION_1_1)
#define NVVK_HAS_VK_KHR_push_descriptor
#endif /* VK_KHR_push_descriptor && VK_VERSION_1_1 */
#if defined(VK_KHR_push_descriptor) && defined(VK_KHR_descriptor_update_template)
#define NVVK_HAS_VK_KHR_push_descriptor
#endif /* VK_KHR_push_descriptor && VK_KHR_descriptor_update_template */
#if defined(VK_KHR_ray_tracing_maintenance1) && defined(VK_KHR_ray_tracing_pipeline)
#define NVVK_HAS_VK_KHR_ray_tracing_maintenance1
#endif /* VK_KHR_ray_tracing_maintenance1 && VK_KHR_ray_tracing_pipeline */
#if defined(VK_KHR_ray_tracing_pipeline)
#define NVVK_HAS_VK_KHR_ray_tracing_pipeline
#endif /* VK_KHR_ray_tracing_pipeline */
#if defined(VK_KHR_sampler_ycbcr_conversion)
#define NVVK_HAS_VK_KHR_sampler_ycbcr_conversion
#endif /* VK_KHR_sampler_ycbcr_conversion */
#if defined(VK_KHR_shared_presentable_image)
#define NVVK_HAS_VK_KHR_shared_presentable_image
#endif /* VK_KHR_shared_presentable_image */
#if defined(VK_KHR_swapchain) && defined(VK_VERSION_1_1)
#define NVVK_HAS_VK_KHR_swapchain
#endif /* VK_KHR_swapchain && VK_VERSION_1_1 */
#if defined(VK_KHR_synchronization2)
#define NVVK_HAS_VK_KHR_synchronization2
#endif /* VK_KHR_synchronization2 */
#if defined(VK_KHR_synchronization2) && defined(VK_AMD_buffer_marker)
#define NVVK_HAS_VK_KHR_synchronization2
#endif /* VK_KHR_synchronization2 && VK_AMD_buffer_marker */
#if defined(VK_KHR_synchronization2) && defined(VK_NV_device_diagnostic_checkpoints)
#define NVVK_HAS_VK_KHR_synchronization2
#endif /* VK_KHR_synchronization2 && VK_NV_device_diagnostic_checkpoints */
#if defined(VK_KHR_timeline_semaphore)
#define NVVK_HAS_VK_KHR_timeline_semaphore
#endif /* VK_KHR_timeline_semaphore */
#if defined(VK_KHR_video_decode_queue)
#define NVVK_HAS_VK_KHR_video_decode_queue
#endif /* VK_KHR_video_decode_queue */
#if defined(VK_KHR_video_encode_queue)
#define NVVK_HAS_VK_KHR_video_encode_queue
#endif /* VK_KHR_video_encode_queue */
#if defined(VK_KHR_video_queue)
#define NVVK_HAS_VK_KHR_video_queue
#endif /* VK_KHR_video_queue */
#if defined(VK_MVK_ios_surface)
#define NVVK_HAS_VK_MVK_ios_surface
#endif /* VK_MVK_ios_surface */
#if defined(VK_MVK_macos_surface)
#define NVVK_HAS_VK_MVK_macos_surface
#endif /* VK_MVK_macos_surface */
#if defined(VK_NN_vi_surface)
#define NVVK_HAS_VK_NN_vi_surface
#endif /* VK_NN_vi_surface */
#if defined(VK_NVX_binary_import)
#define NVVK_HAS_VK_NVX_binary_import
#endif /* VK_NVX_binary_import */
#if defined(VK_NVX_image_view_handle)
#define NVVK_HAS_VK_NVX_image_view_handle
#endif /* VK_NVX_image_view_handle */
#if defined(VK_NV_acquire_winrt_display)
#define NVVK_HAS_VK_NV_acquire_winrt_display
#endif /* VK_NV_acquire_winrt_display */
#if defined(VK_NV_clip_space_w_scaling)
#define NVVK_HAS_VK_NV_clip_space_w_scaling
#endif /* VK_NV_clip_space_w_scaling */
#if defined(VK_NV_cooperative_matrix)
#define NVVK_HAS_VK_NV_cooperative_matrix
#endif /* VK_NV_cooperative_matrix */
#if defined(VK_NV_copy_memory_indirect)
#define NVVK_HAS_VK_NV_copy_memory_indirect
#endif /* VK_NV_copy_memory_indirect */
#if defined(VK_NV_coverage_reduction_mode)
#define NVVK_HAS_VK_NV_coverage_reduction_mode
#endif /* VK_NV_coverage_reduction_mode */
#if defined(VK_NV_cuda_kernel_launch)
#define NVVK_HAS_VK_NV_cuda_kernel_launch
#endif /* VK_NV_cuda_kernel_launch */
#if defined(VK_NV_device_diagnostic_checkpoints)
#define NVVK_HAS_VK_NV_device_diagnostic_checkpoints
#endif /* VK_NV_device_diagnostic_checkpoints */
#if defined(VK_NV_device_generated_commands)
#define NVVK_HAS_VK_NV_device_generated_commands
#endif /* VK_NV_device_generated_commands */
#if defined(VK_NV_device_generated_commands_compute)
#define NVVK_HAS_VK_NV_device_generated_commands_compute
#endif /* VK_NV_device_generated_commands_compute */
#if defined(VK_NV_external_memory_capabilities)
#define NVVK_HAS_VK_NV_external_memory_capabilities
#endif /* VK_NV_external_memory_capabilities */
#if defined(VK_NV_external_memory_rdma)
#define NVVK_HAS_VK_NV_external_memory_rdma
#endif /* VK_NV_external_memory_rdma */
#if defined(VK_NV_external_memory_win32)
#define NVVK_HAS_VK_NV_external_memory_win32
#endif /* VK_NV_external_memory_win32 */
#if defined(VK_NV_fragment_shading_rate_enums)
#define NVVK_HAS_VK_NV_fragment_shading_rate_enums
#endif /* VK_NV_fragment_shading_rate_enums */
#if defined(VK_NV_low_latency2)
#define NVVK_HAS_VK_NV_low_latency2
#endif /* VK_NV_low_latency2 */
#if defined(VK_NV_memory_decompression)
#define NVVK_HAS_VK_NV_memory_decompression
#endif /* VK_NV_memory_decompression */
#if defined(VK_NV_mesh_shader)
#define NVVK_HAS_VK_NV_mesh_shader
#endif /* VK_NV_mesh_shader */
#if defined(VK_NV_optical_flow)
#define NVVK_HAS_VK_NV_optical_flow
#endif /* VK_NV_optical_flow */
#if defined(VK_NV_ray_tracing)
#define NVVK_HAS_VK_NV_ray_tracing
#endif /* VK_NV_ray_tracing */
#if defined(VK_NV_scissor_exclusive) && VK_NV_SCISSOR_EXCLUSIVE_SPEC_VERSION >= 2
#define NVVK_HAS_VK_NV_scissor_exclusive
#endif /* VK_NV_scissor_exclusive && VK_NV_SCISSOR_EXCLUSIVE_SPEC_VERSION >= 2 */
#if defined(VK_NV_scissor_exclusive)
#define NVVK_HAS_VK_NV_scissor_exclusive
#endif /* VK_NV_scissor_exclusive */
#if defined(VK_NV_shading_rate_image)
#define NVVK_HAS_VK_NV_shading_rate_image
#endif /* VK_NV_shading_rate_image */
#if defined(VK_QCOM_tile_properties)
#define NVVK_HAS_VK_QCOM_tile_properties
#endif /* VK_QCOM_tile_properties */
#if defined(VK_QNX_external_memory_screen_buffer)
#define NVVK_HAS_VK_QNX_external_memory_screen_buffer
#endif /* VK_QNX_external_memory_screen_buffer */
#if defined(VK_QNX_screen_surface)
#define NVVK_HAS_VK_QNX_screen_surface
#endif /* VK_QNX_screen_surface */
#if defined(VK_VALVE_descriptor_set_host_mapping)
#define NVVK_HAS_VK_VALVE_descriptor_set_host_mapping
#endif /* VK_VALVE_descriptor_set_host_mapping */
#if defined(VK_EXT_extended_dynamic_state) || defined(VK_EXT_shader_object)
#define NVVK_HAS_VK_EXT_extended_dynamic_state
#endif /* VK_EXT_extended_dynamic_state || VK_EXT_shader_object */
#if defined(VK_EXT_extended_dynamic_state2) || defined(VK_EXT_shader_object)
#define NVVK_HAS_VK_EXT_extended_dynamic_state2
#endif /* VK_EXT_extended_dynamic_state2 || VK_EXT_shader_object */
#if defined(VK_EXT_extended_dynamic_state3) || defined(VK_EXT_shader_object)
#define NVVK_HAS_VK_EXT_extended_dynamic_state3
#endif /* VK_EXT_extended_dynamic_state3 || VK_EXT_shader_object */
#if defined(VK_EXT_extended_dynamic_state3) && defined(VK_NV_clip_space_w_scaling) || defined(VK_EXT_shader_object) && defined(VK_NV_clip_space_w_scaling)
#define NVVK_HAS_VK_EXT_extended_dynamic_state3
#endif /* VK_EXT_extended_dynamic_state3 && VK_NV_clip_space_w_scaling || VK_EXT_shader_object && VK_NV_clip_space_w_scaling */
#if defined(VK_EXT_extended_dynamic_state3) && defined(VK_NV_viewport_swizzle) || defined(VK_EXT_shader_object) && defined(VK_NV_viewport_swizzle)
#define NVVK_HAS_VK_EXT_extended_dynamic_state3
#endif /* VK_EXT_extended_dynamic_state3 && VK_NV_viewport_swizzle || VK_EXT_shader_object && VK_NV_viewport_swizzle */
#if defined(VK_EXT_extended_dynamic_state3) && defined(VK_NV_fragment_coverage_to_color) || defined(VK_EXT_shader_object) && defined(VK_NV_fragment_coverage_to_color)
#define NVVK_HAS_VK_EXT_extended_dynamic_state3
#endif /* VK_EXT_extended_dynamic_state3 && VK_NV_fragment_coverage_to_color || VK_EXT_shader_object && VK_NV_fragment_coverage_to_color */
#if defined(VK_EXT_extended_dynamic_state3) && defined(VK_NV_framebuffer_mixed_samples) || defined(VK_EXT_shader_object) && defined(VK_NV_framebuffer_mixed_samples)
#define NVVK_HAS_VK_EXT_extended_dynamic_state3
#endif /* VK_EXT_extended_dynamic_state3 && VK_NV_framebuffer_mixed_samples || VK_EXT_shader_object && VK_NV_framebuffer_mixed_samples */
#if defined(VK_EXT_extended_dynamic_state3) && defined(VK_NV_shading_rate_image) || defined(VK_EXT_shader_object) && defined(VK_NV_shading_rate_image)
#define NVVK_HAS_VK_EXT_extended_dynamic_state3
#endif /* VK_EXT_extended_dynamic_state3 && VK_NV_shading_rate_image || VK_EXT_shader_object && VK_NV_shading_rate_image */
#if defined(VK_EXT_extended_dynamic_state3) && defined(VK_NV_representative_fragment_test) || defined(VK_EXT_shader_object) && defined(VK_NV_representative_fragment_test)
#define NVVK_HAS_VK_EXT_extended_dynamic_state3
#endif /* VK_EXT_extended_dynamic_state3 && VK_NV_representative_fragment_test || VK_EXT_shader_object && VK_NV_representative_fragment_test */
#if defined(VK_EXT_extended_dynamic_state3) && defined(VK_NV_coverage_reduction_mode) || defined(VK_EXT_shader_object) && defined(VK_NV_coverage_reduction_mode)
#define NVVK_HAS_VK_EXT_extended_dynamic_state3
#endif /* VK_EXT_extended_dynamic_state3 && VK_NV_coverage_reduction_mode || VK_EXT_shader_object && VK_NV_coverage_reduction_mode */
#if defined(VK_EXT_full_screen_exclusive) && defined(VK_KHR_device_group) || defined(VK_EXT_full_screen_exclusive) && defined(VK_VERSION_1_1)
#define NVVK_HAS_VK_EXT_full_screen_exclusive
#endif /* VK_EXT_full_screen_exclusive && VK_KHR_device_group || VK_EXT_full_screen_exclusive && VK_VERSION_1_1 */
#if defined(VK_EXT_host_image_copy) || defined(VK_EXT_image_compression_control)
#define NVVK_HAS_VK_EXT_host_image_copy
#endif /* VK_EXT_host_image_copy || VK_EXT_image_compression_control */
#if defined(VK_EXT_shader_object) || defined(VK_EXT_vertex_input_dynamic_state)
#define NVVK_HAS_VK_EXT_shader_object
#endif /* VK_EXT_shader_object || VK_EXT_vertex_input_dynamic_state */
#if defined(VK_KHR_descriptor_update_template) && defined(VK_KHR_push_descriptor) || defined(VK_KHR_push_descriptor) && defined(VK_VERSION_1_1) || defined(VK_KHR_push_descriptor) && defined(VK_KHR_descriptor_update_template)
#define NVVK_HAS_VK_KHR_descriptor_update_template
#endif /* VK_KHR_descriptor_update_template && VK_KHR_push_descriptor || VK_KHR_push_descriptor && VK_VERSION_1_1 || VK_KHR_push_descriptor && VK_KHR_descriptor_update_template */
#if defined(VK_KHR_device_group) && defined(VK_KHR_surface) || defined(VK_KHR_swapchain) && defined(VK_VERSION_1_1)
#define NVVK_HAS_VK_KHR_device_group
#endif /* VK_KHR_device_group && VK_KHR_surface || VK_KHR_swapchain && VK_VERSION_1_1 */
#if defined(VK_KHR_device_group) && defined(VK_KHR_swapchain) || defined(VK_KHR_swapchain) && defined(VK_VERSION_1_1)
#define NVVK_HAS_VK_KHR_device_group
#endif /* VK_KHR_device_group && VK_KHR_swapchain || VK_KHR_swapchain && VK_VERSION_1_1 */
/* NVVK_GENERATE_DEFINE */
